// import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem_ptr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "SQLObjectImpl.h"
#include "SQLReplaceable.h"

class SQLZOrderBy : virtual public SQLObjectImpl, virtual public SQLReplaceable
{
public:
  SQLSelectOrderByItem_list_ptr items;

  // for postgres
  BOOL_ptr sibings;

  SQLZOrderBy();

  SQLZOrderBy(SQLExpr_ptr expr);

  SQLZOrderBy(SQLExpr_ptr expr, SQLOrderingSpecification_ptr type);
  SHAREDOBJECT(SQLZOrderBy);

  void addItem(SQLSelectOrderByItem_ptr item);

  void addItem(SQLExpr_ptr item);

  SQLSelectOrderByItem_list_ptr getItems();

  BOOL_ptr isSibings();

  void setSibings(BOOL_ptr sibings);

  void accept0(SQLASTVisitor_ptr v);

  // @Override
  bool equals(Object_ptr o);

  // @Override
  int hashCode();

  void addItem(SQLExpr_ptr expr, SQLOrderingSpecification_ptr type);

  // @Override
  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);

  SQLSelectOrderByItem_ptr createItem();

  SQLObject_ptr clone();
};
